#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 1e5 + 10;
int fa[maxn];
int dist[maxn]; // 表示从该节点到根的距离(权值)
int n,m,q;

int root(int x){ // 查找根
	if(fa[x]==x){
		return x;
	}
	// 顺序必须按照下面的写, 不然就乱了
	int p=fa[x];
	fa[x]=root(fa[x]); // 让父亲节点的距离都修改完成
	dist[x]+=dist[p]; // 再修改当前节点
	return fa[x];
}

void solve(){
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){ // 初始化并查集
		fa[i]=i;
	}
	for(int i=1;i<=m;i++){
		int l, r, s;
		cin>>l>>r>>s;
		int fl=root(l-1);
		int fr=root(r);
		fa[fl]=fr; // 进行合并
		dist[fl]=dist[r]-s-dist[l-1]; // 修改l-1 到根节点的距离, 注意这里面 - 的是 dist[l-1], 不是 dist[fl]
	}
	
	
	// 处理询问
	for(int i=1;i<=q;i++){
		int l,r;
		cin>>l>>r;
		if(root(l-1)!=root(r)){ // 不再同一个集合里面
			cout<<"UNKNOWN"<<'\n';
		} else {
			cout<<dist[r]-dist[l-1]<<'\n';
		}
	}
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
